﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

namespace DAO
{
    public class AtividadeDAO
    {
        #region Leitores
        public static Atividade Selecionar(int eventoID, int id)
        {
            try
            {
                var bco = new PersistenciaContainer();
                var obj = bco.Atividades.FirstOrDefault(e => e.eventoID == eventoID && e.ID == id);
                if (obj == null) { throw new Exception("Atividade não encontrada!"); }
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception("Selecionar() - " + ex.Message.ToString());
            }
        }
        public static DropDownList Listar(DropDownList ddl, int eventoID)
        {
            try
            {
                var bco = new PersistenciaContainer();
                var objs = (from a in bco.Atividades
                            orderby a.descricao ascending
                            where a.eventoID == eventoID
                            select new
                            {
                                ID = a.ID,
                                Descrição = a.descricao
                            }).ToList();
                ddl.DataSource = objs;
                ddl.DataTextField = "Descrição";
                ddl.DataValueField = "ID";
                ddl.DataBind();
                ddl.Items.Insert(0, "- -");
                return ddl;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message.ToString());
            }
        }
        public static List<Atividade> Listar(int eventoID)
        {
            PersistenciaContainer bco = new PersistenciaContainer();
            List<Atividade> objs = (from a in bco.Atividades where a.eventoID == eventoID select a).ToList();
            return objs;
        }
        public static List<Atividade> Listar(int eventoID, int departamentoID, int categoriaID, int id, string descricao)
        {
            PersistenciaContainer bco = new PersistenciaContainer();
            List<Atividade> objs = (from a in bco.Atividades where a.eventoID == eventoID select a).ToList();

            if (id != 0)
            {
                objs = objs.FindAll(g => g.ID == id).ToList();
            }

            if (departamentoID != 0)
            {
                objs = objs.FindAll(g => g.departamentoID == departamentoID).ToList();
            }

            if (categoriaID != 0)
            {
                objs = objs.FindAll(g => g.categoriaID == categoriaID).ToList();
            }

            if (!string.IsNullOrEmpty(descricao))
            {
                objs = objs.FindAll(g => g.descricao.ToLower().Contains(descricao.ToLower().Trim())).ToList();
            }

            return objs;
        }
        #endregion

        #region Modificadores
        public static void Salvar(Atividade objNovo)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();
                if (objNovo.ID == 0)
                {
                    bco.Atividades.AddObject(objNovo);
                    bco.SaveChanges();
                }

                else
                {
                    Atividade objOLD = bco.Atividades.FirstOrDefault(e => e.eventoID == objNovo.eventoID && e.ID == objNovo.ID);

                    if (objOLD != null)
                    {
                        objOLD.categoriaID = objNovo.categoriaID;
                        objOLD.descricao = objNovo.descricao;
                        bco.SaveChanges();
                    }
                    else
                        throw new Exception("Atividade não localizada!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        public static void Submeter(Pessoa pessoa, Atividade atividade)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();

                if (atividade.ID == 0)
                {
                    bco.Atividades.AddObject(atividade);

                    if (pessoa.ID == 0)
                        bco.Pessoas.AddObject(pessoa);
                    else
                        pessoa = bco.Pessoas.FirstOrDefault(g => g.eventoID == pessoa.eventoID && g.ID == pessoa.ID);

                    AtividadePessoa atividadePessoa = new AtividadePessoa();


                    atividadePessoa.eventoID = pessoa.eventoID;
                    atividadePessoa.Atividade = atividade;
                    atividadePessoa.Pessoa = pessoa;

                    Papel papel = bco.Papels.FirstOrDefault(g => g.eventoID == pessoa.eventoID && g.descricao.Contains("Autor"));
                    atividadePessoa.Papel = papel;

                    bco.AtividadePessoas.AddObject(atividadePessoa);

                    bco.SaveChanges();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        public static void Deletar(int eventoID, int id)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();

                Atividade obj = bco.Atividades.FirstOrDefault(g => g.eventoID == eventoID && g.ID == id);

                bco.Atividades.DeleteObject(obj);
                bco.SaveChanges();
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region Validadores

        #endregion
    }
}
